前面的教學建立AWS的方式其實都是使用手動建立的方式,但過程中非常耗時,也容易出錯。
CDK(Cloud Development Kit)是一套可以用寫程式的方式來建立AWS資源,增加建置的效率,並且也可以使用git作版本控管,非常方便。
這邊單純講的話會非常空洞,因此直接學習他人的實作題來進行,增加學習的熟悉度。
在這篇的教學文章中,使用CDK建立一個SQS,然後會觸發Lamdbda,接著將lambda訊息寫到cloudwatch。
所以整理一下,一共有幾件事要做
在 lib 同一層建立一個檔案夾,名字叫做 lambda,裡面建立一個 index.ts。
index.ts的內容就是要將訊息記錄到CloudWatch
exports.handler = async function(event: any) {
console.log(JSON.stringify(event, undefined, 2));
}
一樣使用npm安裝
npm i @aws-cdk/aws-lambda
回到剛剛的 lib/hello-cdk-stack.ts
在import的部分加入lambda library
// 引入需要的 library
import lambda = require('@aws-cdk/aws-lambda');
在function內加入建立lambda程式碼
// 實例化一個 lambda function
new lambda.Function(this, 'HelloFunction', {
runtime: lambda.Runtime.NODEJS_8_10,
code: lambda.Code.asset('lambda'),
handler: 'index.handler'
});
所以最後 lib/hello-cdk-stack.ts 會變成
import * as cdk from '@aws-cdk/core';
// 引入 aws-sqs
import sqs = require('@aws-cdk/aws-sqs');
// 引入需要的 library
import lambda = require('@aws-cdk/aws-lambda');
export class HelloCdkStack extends cdk.Stack {
constructor(scope: cdk.Construct, id: string, props?: cdk.StackProps) {
super(scope, id, props);
// 實例化這個 queue
new sqs.Queue(this, "HelloQueue");
// 實例化一個 lambda function
new lambda.Function(this, 'HelloFunction', {
runtime: lambda.Runtime.NODEJS_12_X,
code: lambda.Code.asset('lambda'),
handler: 'index.handler'
});
}
}
可以先使用指令看CloudFormation內容,由此可知CloudFormation多複雜了…
cdk synth
也可以使用diff指令看差異是什麼
cdk diff
一樣使用deploy來佈署
cdk deploy
進去AWS Lambda看就會發現已經建立了
https://medium.com/@azole/aws-cdk-%E5%88%9D%E6%8E%A2-5b481d3970bd